home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Applications 2004 May / SGI IRIX 6.5 Applications 2004 May.iso / dist / java3d.idb / usr / demos / java / j3d / programs / examples / ConfiguredUniverse / j3d1x1-vr.z / j3d1x1-vr
Encoding:
Text File  |  2003-08-08  |  9.1 KB  |  208 lines

  1. /*
  2.  *    @(#)j3d1x1-vr 1.2 01/10/29 15:41:30
  3.  *
  4.  * Copyright (c) 1996-2001 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  *
  10.  * - Redistributions of source code must retain the above copyright
  11.  *   notice, this list of conditions and the following disclaimer.
  12.  *
  13.  * - Redistribution in binary form must reproduce the above copyright
  14.  *   notice, this list of conditions and the following disclaimer in
  15.  *   the documentation and/or other materials provided with the
  16.  *   distribution.
  17.  *
  18.  * Neither the name of Sun Microsystems, Inc. or the names of
  19.  * contributors may be used to endorse or promote products derived
  20.  * from this software without specific prior written permission.
  21.  *
  22.  * This software is provided "AS IS," without a warranty of any
  23.  * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
  24.  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
  25.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
  26.  * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
  27.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  28.  * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
  29.  * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
  30.  * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
  31.  * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
  32.  * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
  33.  * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  34.  *
  35.  * You acknowledge that Software is not designed,licensed or intended
  36.  * for use in the design, construction, operation or maintenance of
  37.  * any nuclear facility.
  38.  */
  39.  
  40. /*
  41.  ************************************************************************
  42.  *  
  43.  * Java 3D configuration file for a single screen stereo desktop display
  44.  * using a head tracker and 6DOF mouse.
  45.  *
  46.  ************************************************************************
  47.  */
  48.  
  49. // Configure the head tracker.  The NewDevice command binds a logical name
  50. // (the 2nd argument) to an InputDevice implementation whose class name is
  51. // specified in the 3rd argument.  The InputDevice implementation for a head
  52. // tracker must generate position and orientation data relative to a fixed
  53. // frame of reference in the physical world, the "tracker base" of the Java
  54. // 3D view model.
  55. // 
  56. // The InputDevice is instantiated through introspection of the class name.
  57. // Available InputDevice implementations are site-specific, so substitute
  58. // the class name in a NewDevice command below with one that is available at
  59. // the local site.
  60. // 
  61. // Note that properties are used to configure an InputDevice instead of
  62. // attributes.  The details of an InputDevice implementation are not known to
  63. // ConfiguredUniverse, so the property name is invoked as a method through
  64. // introspection.  The example properties below must be replaced with the ones
  65. // needed, if any, by specific InputDevice implementations.
  66. // 
  67. // All property arguments following the method name are wrapped and passed to
  68. // the specified method as an array of Objects.  Strings "true" and "false"
  69. // get wrapped into Boolean, and number strings get wrapped into Double.
  70. // Construct such as (0.0 1.0 2.0) and ((0.0 1.0 2.0 0.5) (3.0 4.0 5.0 1.0)
  71. // (6.0 7.0 8.0 0.0)) get converted to Point3d and Matrix4d respectively.
  72. // Note that last row of a Matrix4d doesn't need to be specified; it is
  73. // implicitly (0.0 0.0 0.0 1.0).
  74. // 
  75. (NewDevice      glasses LogitechRedBarron)
  76. (DeviceProperty glasses SerialPort "/dev/ttya") // Unix paths need quoting.
  77. (DeviceProperty glasses ReceiverBaseline     0.1450)
  78. (DeviceProperty glasses ReceiverLeftLeg      0.0875)
  79. (DeviceProperty glasses ReceiverHeight       0.0470)
  80. (DeviceProperty glasses ReceiverTopOffset    0.0000)
  81.  
  82. // Configure an InputDevice to use for a 6 degree of freedom mouse if
  83. // required.  In some implementations the same InputDevice instance can be
  84. // used both for head tracking and multiple peripheral sensing devices.
  85. // This example assumes an implementation that requires multiple instances,
  86. // one for each sensor, sharing the same physical hardware used for the
  87. // tracker base.  In either case all the sensors must generate position and
  88. // orientation relative to the same fixed tracker base frame of reference.
  89. // 
  90. (NewDevice      wand    LogitechRedBarron)
  91. (DeviceProperty wand    SerialPort "/dev/ttyb")
  92. (DeviceProperty wand    ReceiverBaseline     0.0700)
  93. (DeviceProperty wand    ReceiverLeftLeg      0.0625)
  94. (DeviceProperty wand    ReceiverHeight       0.0510)
  95. (DeviceProperty wand    ReceiverTopOffset    0.0000)
  96.  
  97. // Create logical names for the available sensors in the specified input
  98. // devices.  The last argument is the sensor's index in the input device.
  99. // 
  100. (NewSensor head    glasses 0)
  101. (NewSensor mouse6d wand    0)
  102.  
  103. // Set the 6DOF mouse sensor hotspot in the local sensor coordinate system.
  104. // The hotspot is simply the "active" point relative to the sensor origin
  105. // which interacts with the virtual world, such as the point used for picking
  106. // or grabbing an object.  Its interpretation is up to the sensor behavior.
  107. // 
  108. // It is set here to 10 centimeters from the base to allow reaching into the
  109. // screen without bumping the device into the glass, and to prevent the device
  110. // itself from obscuring the pointer echo.
  111. // 
  112. (SensorAttribute mouse6d Hotspot (0.0 0.0 -0.10))
  113.  
  114.  
  115. // Create a new screen object and associate it with a logical name and a
  116. // number.  This number is used as an index to retrieve the AWT GraphicsDevice
  117. // from the array that GraphicsEnvironment.getScreenDevices() returns.
  118. // 
  119. // NOTE: The GraphicsDevice order in the array is specific to the local
  120. // site and display system.
  121. // 
  122. (NewScreen center 0)
  123.  
  124. // Set the actual available image area.  This measured as 0.350 meters in
  125. // width and 0.245 meters in height for the monitor in the sample setup when
  126. // running in stereo resolution.
  127. // 
  128. (ScreenAttribute center PhysicalScreenWidth     0.350)
  129. (ScreenAttribute center PhysicalScreenHeight    0.245)
  130. (ScreenAttribute center WindowSize              NoBorderFullScreen)
  131.  
  132. // Set the TrackerBaseToImagePlate transform for this screen.  This transforms
  133. // points in tracker base coordinates to image plate coordinates.
  134. // 
  135. // For this sample setup the tracker base is leaning at 50 degrees about its
  136. // X-axis over the top edge of the monitor.  The middle of the tracker base
  137. // (its origin) is offset by (0.175, 0.345, 0.020) from the lower left
  138. // corner of the screen (origin of the image plate).
  139. // 
  140. (ScreenAttribute center TrackerBaseToImagePlate
  141.                  (RotateTranslate (Rotate    50.000 0.000 0.000)
  142.                                   (Translate  0.175 0.345 0.020)))
  143.  
  144.  
  145. // Create a physical environment.  This contains the available input devices,
  146. // audio devices, and sensors, and defines the coexistence coordinate system.
  147. // 
  148. (NewPhysicalEnvironment       SampleSite)
  149.  
  150. // Register the input devices defined in this file.
  151. // 
  152. (PhysicalEnvironmentAttribute SampleSite InputDevice glasses)
  153. (PhysicalEnvironmentAttribute SampleSite InputDevice wand)
  154.  
  155. // Register the sensor which will drive head tracking.
  156. // 
  157. (PhysicalEnvironmentAttribute SampleSite HeadTracker head)
  158.  
  159. // Define coexistence coordinates.
  160. // 
  161. // Coexistence coordinates are defined relative to the tracker base to simplify
  162. // calibration measurements, just as the tracker base is used as the common
  163. // reference frame for the TrackerBaseToImagePlate calibration.
  164. // 
  165. // Here the coexistence origin is set to the middle of the center screen, using
  166. // the same basis vectors as its image plate.  This will put the tracker base
  167. // origin at (0.0 0.220 0.020) relative to the coexistence origin along its
  168. // basis vectors.
  169. // 
  170. (PhysicalEnvironmentAttribute SampleSite CoexistenceToTrackerBase
  171.                               (TranslateRotate (Translate 0.0 -0.220 -0.020)
  172.                                                (Rotate -50.0 0.0 0.0)))
  173.  
  174. // Define the physical body.
  175. //
  176. // The head origin is halfway between the eyes, with X extending to the right,
  177. // Y up, and positive Z extending into the skull.
  178. // 
  179. (NewPhysicalBody       SiteUser)
  180.  
  181. // Set the interpupilary distance.  This sets the LeftEyePosition and
  182. // RightEyePosition to offsets of half this distance along both directions of
  183. // the X axis.
  184. // 
  185. (PhysicalBodyAttribute SiteUser StereoEyeSeparation 0.066)
  186.  
  187. // Define the position and orientation of the head relative to the tracker
  188. // mounted on the head.
  189. // 
  190. (PhysicalBodyAttribute SiteUser HeadToHeadTracker ((1.0 0.0 0.0 0.000)
  191.                                                    (0.0 1.0 0.0 0.020)
  192.                                                    (0.0 0.0 1.0 0.018)))
  193.  
  194.  
  195. // Create a view using the defined screens, PhysicalEnvironment, and
  196. // PhysicalBody. 
  197. // 
  198. (NewView        view0)
  199. (ViewAttribute  view0   Screen                  center)
  200. (ViewAttribute  view0   PhysicalEnvironment     SampleSite)
  201. (ViewAttribute  view0   PhysicalBody            SiteUser)
  202.  
  203. // Enable stereo viewing.  Enable head tracking to get the position of the eyes
  204. // with respect to coexistence.  
  205. // 
  206. (ViewAttribute  view0   StereoEnable            true)
  207. (ViewAttribute  view0   TrackingEnable          True)
  208.